import wxApi from "../../utils/wxApi";
// Page({
//   /**
//    * 页面的初始数据
//    */
//   data: {
//     cartList: [],
//     total_price: 0,
//     allchecked: false
//   },
//   id: 0,
//   flag: false,
//   onLoad: function (options) {
//     let cart = wx.getStorageSync("cart")
//     // console.log(collectData);
//     this.setData({
//       cart
//     })
//   },
//   onShow: function () {
//   },
//   //添加收货地址
//   getAddress: async function () {
//     console.log("settings", wxApi)
//     try {
//       let settings = await wxApi.getSetting();
//       let addressSuccess = settings.authSetting["scope.address"]
//       if (!addressSuccess) await wxApi.openSetting();
//       let address = await wxApi.chooseAddress();
//       console.log("地址", address)
//     } catch (err) {
//       console.log(err)
//     }
//   },

//   //步进器数量改变计算当前的总价格
//   numChange(e) {
//     //e 拿到步进器中的数字 == 当前数据的的商品总数量
//     // console.log(e.detail);
//     // console.log(e);

//     //对当前商品的id进行存储
//     this.id = e.currentTarget.dataset.id
//     //对数据进行循环遍历 先获取本地的数据
//     let cart = wx.getStorageSync("cart")
//     //找到当前商品的id
//     let index = cart.findIndex(item => item.goods_id === this.id)
//     if (index !== -1) { //判断如果找到了进行逻辑操作
//       //改变当前的商品数量 获取步进器传递过来的数据对总数据的数量进行赋值变更
//       cart[index].num = e.detail;
//     }
//     //然后重新发送数据
//     this.setData({
//       cart
//     })
//   },

//   // 改变多选框的选中状态
//   onChange(event) {
//     // console.log(event);
//     console.log(event.detail);
//     let cart = wx.getStorageSync("cart")
//     let index = cart.findIndex(item => item.goods_id === this.id)
//     if (index !== -1) { //判断如果找到了进行逻辑操作
//       //改变当前的商品数量 获取步进器传递过来的数据对总数据的数量进行赋值变更
//       cart[index].is_promote = event.detail;
//     }
//     this.setData({
//       cart
//     });
//   },

//   //全选多选框选中状态
//   onCheckedChange(event) {
//     console.log(event.detail);
//     this.setData({
//       checked: event.detail,
//     })
//   }
// })

Page({

  /**
   * 页面的初始数据
   */
  data: {
    //存放用户地址信息
    address: {},
    //购物车数据
    cart: [],
    //是否全选
    allChecked: false,
    //总价格
    totalPrice: 0,
    //总数量
    totalNum: 0
  },

  //获取收获地址
  //在onShow生命周期中初始化页面数据(收获地址, 购物车列表, 是否全选 合计)
  onShow: function () {
    let address = wx.getStorageSync('address') || {};
    this.setData({ address });
    let cart = wx.getStorageSync('cart') || [];
    this.updateCart(cart)

    /**
     * 实现全选的逻辑
     * 0. 定义一个全局变量 来表示购物车中的数据是否被全选
     *  1.根据购物车中的商品数据信息 如果商品的checked都为true就是全选 否则不用处理
     */
    //数组的every方法 遍历所有数据, 方法接受一个回调函数为参数, 这个回调函数的返回值必须为布尔类型,当所有回调函数的返回值都为true的时候 every方法 返回true; 
    // every方法的性能问题: 如果循环中出现一个不符合条件的值,那么将停止循环,然后直接返回false
    // let allChecked = true;
    // let allChecked = cart.every(item=>item.checked);
    /**
     * 实现总价格和总数量合计逻辑
     * 1. 遍历购物车数组
     * 2. 判断商品是否被选中 如果被选中才参与计算
     * 3. 总价格 += 商品的单价 * 数量
     * 4. 总数量 += 商品的数量 
     */
    //总价格,总数量
    // let totalPrice = 0;
    // let totalNum = 0;
    // cart.forEach(item=>{
    //   if(item.checked){
    //     totalPrice += item.goods_price * item.num;
    //     totalNum += item.num;
    //   }else{
    //     allChecked = false;
    //   }
    // });
    // allChecked = cart.length?allChecked:false
    // this.setData({
    //   address,cart,allChecked,totalPrice,totalNum
    // })
  },

  //更新购物车状态
  updateCart(cart) {
    let allChecked = true;
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(item => {
      if (item.checked) {
        totalPrice += item.goods_price * item.num;
        totalNum += item.num;
      } else {
        allChecked = false;
      }
    });
    allChecked = cart.length ? allChecked : false
    this.setData({
      cart, allChecked, totalPrice, totalNum
    });
    //更新到缓存中
    wx.setStorageSync('cart', cart)
  },

  //某条商品数据被选中事件处理
  onItemCheckChange(e) {
    /**
     * 1.获取被选中的商品id
     * 2.获取商品当前的选中状态 然后取反
     * 3 需要重新计算的内容 --> 全选按钮  总价格 总数量
     */
    //1.获取被选中的商品id
    let goodsId = e.currentTarget.dataset.id;
    //2.获取购物车信息,根据商品id找到当前商品的信息
    let { cart } = this.data;
    let index = cart.findIndex(item => item.goods_id === goodsId);
    let curGoods = cart[index];
    curGoods.checked = !curGoods.checked;
    //重新计算是否全选 和价格合计 以及数量合计
    this.updateCart(cart)
  },

  //获取收货地址
  getAddress: async function () {
    console.log("settings", wxApi)
    try {
      let settings = await wxApi.getSetting();
      let addressSuccess = settings.authSetting["scope.address"]
      if (!addressSuccess) await wxApi.openSetting();
      let address = await wxApi.chooseAddress();
      console.log("地址", address);
      address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;
      wx.setStorageSync('address', address);
      this.setData({
        address
      })
    } catch (err) {
      console.log(err)
    }
  }
})